/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Itens;

import Engine.Fisica.Planeta;
import jogopoo.Util.Matematica;
import Engine.Fisica.ObjFisico;
import java.awt.Image;
import java.util.ArrayList;
import jogopoo.Grafico.GrafCenario;
import jogopoo.Personagem.PersNave;

/**
 *
 * @author pererabass
 */
/**
 * Objetos Laser (tiros do canhao), estende PersonagemDesanimado.
 * @author acer_5542
 */
public class Ogiva extends ObjFisico {

    /**
     * Construtor recebe de parametro o GrafCenario cenario, imagem,
     * e PersNave player, seta o atributo velocidade.
     * @param cenario
     * @param desenho
     * @param player
     */
    public Ogiva(GrafCenario cenario, Image[] desenho, PersNave player,
            float massa, ArrayList<Planeta> lista_planeta) {

        super(cenario, desenho, massa);
        this.player = player;
        this.lista_planeta = lista_planeta;
        this.origemX = 20;
        this.origemY =  7;
        this.adicionaVetor(0, Math.toRadians(90));
        this.aplicaFIntantanea(20, Math.toRadians(90));
        for (int i = 0; i < lista_planeta.size(); ++i) {
            this.adicionaVetor(0, Matematica.direcaoPonto(posicao.x, posicao.y,
                    lista_planeta.get(i).getPosicao().x,
                    lista_planeta.get(i).getPosicao().y));
        }

    }

    /**
     * Seta o indice (numero do tiro no ArrayList).
     * @param indice
     */
    public void setIndice(int indice) {
        this.indice = indice;
    }

    /**
     * Retorna o indice (numero do tiro no ArrayList).
     * @return
     */
    public int getIndice() {
        return this.indice;
    }

    /**
     * Atualiza as componentes do tiro,
     * faz também todos os testes de colisão
     */
    @Override
    public void atualiza() {
        double d;
        int i, j = 0, size, k = -1;
        boolean dentro = false;
        for (i = 0; i < lista_planeta.size(); ++i) {
            d = this.setForcaG(lista_planeta.get(i), i + 1);
            size = lista_planeta.get(i).getListaElipses().size();
            if (size > 0 && d < lista_planeta.get(i).getRaio()) {
                while (j < size && Matematica.distanciaPonto(this.posicao.x, this.posicao.y,
                        (int) lista_planeta.get(i).getListaElipses().get(j).getX() + 9,
                        (int) lista_planeta.get(i).getListaElipses().get(j).getY() + 9) >= 15) {
                    ++j;

                }
                if (j != size) {
                    dentro = true;
                }
            }
            if (d < lista_planeta.get(i).getRaio() && !dentro) {
                cenario.getListaEfeitos().add(new NuclearEx(cenario,lista_planeta.get(i).getPosicao().x,
                        lista_planeta.get(i).getPosicao().y ));
                cenario.setTremeStrong(10);
                cenario.setTreme(true);
                lista_planeta.remove(i);
                player.getListaLaser().remove(this);
            }
        }
        int kill = 0;
        for (i = 0; i < cenario.getListaAliens().size(); ++i) {
            if (posicao.x + 12 > cenario.getListaAliens().get(i).getPosicao().x) {
                if (cenario.getListaAliens().get(i).getPosicao().x + 64 > posicao.x + 12) {
                    if (posicao.y + 12 > cenario.getListaAliens().get(i).getPosicao().y) {
                        if (cenario.getListaAliens().get(i).getPosicao().y + 64 > posicao.y + 12) {
                            cenario.getListaEfeitos().add(new NuclearEx(cenario, posicao.x, posicao.y));
                            cenario.setTremeStrong(10);
                            cenario.setTreme(true);
                            cenario.setAlienChar(cenario.getListaAliens().get(i).getId(), 'n');
                            cenario.getListaAliens().remove(i);
                            kill++;
                            cenario.getJanela().incrementaScore(100);
                            player.getListaLaser().remove(this);
                        }
                    }
                }
            }

        }
        this.TetaSetResult();
        if (this.saiuDaJanela()) {
            player.getListaLaser().remove(this);
        }
        if (this.posicao.y + 12> player.getPosicao().y + 32 &&
                this.posicao.x + 12> player.getPosicao().x &&
                this.posicao.x + 12 < player.getPosicao().x + 64) {
            cenario.getPlayer().morre();
            cenario.getListaEfeitos().add(new NuclearEx(cenario, posicao.x, posicao.y));
            player.getListaLaser().remove(this);
        }


    }
    private PersNave player;
    private int indice;
    private ArrayList<Planeta> lista_planeta;
}
